import defineReactiveData from './reactive';
import {
  arrMethods
} from './array';
import observeArr from './observeArr';

function Observer(data) {
  //对数组处理 自己的方法
  if (Array.isArray(data)) {
    //更改我数据底下操作array的方法
    data.__proto__ = arrMethods;

    //再包装一下data 增加getter/setter方法
    observeArr(data);

  } else {
    //对对象处理 defineProperty 
    this.walk(data);

  }

}

Observer.prototype.walk = function (data) {
  //拿出所有的key
  var keys = Object.keys(data);
  // console.log(keys);
  // ['title', 'classNum', 'total', 'teacher', 'students']

  for (var i = 0; i < keys.length; i++) {
    var key = keys[i],
      value = data[key];

    //拦截所有的属性定义响应式数据
    //目的：将title/classNum/total/teacher/students属性定义getter/setter方法实时监控属性内容
    defineReactiveData(data, key, value);
  }

}

export default Observer;